home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / libcs / skipto.c < prev    next >
Text File  |  1995-06-12  |  3KB  |  86 lines

  1. /*
  2.  * Copyright (c) 1990 Carnegie Mellon University
  3.  * All Rights Reserved.
  4.  * 
  5.  * Permission to use, copy, modify and distribute this software and its
  6.  * documentation is hereby granted, provided that both the copyright
  7.  * notice and this permission notice appear in all copies of the
  8.  * software, derivative works or modified versions, and any portions
  9.  * thereof, and that both notices appear in supporting documentation.
  10.  *
  11.  * THE SOFTWARE IS PROVIDED "AS IS" AND CARNEGIE MELLON UNIVERSITY
  12.  * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
  13.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT
  14.  * SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE FOR ANY SPECIAL, DIRECT,
  15.  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
  16.  * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
  17.  * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  18.  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  19.  *
  20.  * Users of this software agree to return to Carnegie Mellon any
  21.  * improvements or extensions that they make and grant Carnegie the
  22.  * rights to redistribute these changes.
  23.  *
  24.  * Export of this software is permitted only after complying with the
  25.  * regulations of the U.S. Deptartment of Commerce relating to the
  26.  * Export of Technical Data.
  27.  */
  28. /************************************************************************
  29.  *  skipover and skipto -- skip over characters in string
  30.  *
  31.  *  Usage:    p = skipto (string,charset);
  32.  *        p = skipover (string,charset);
  33.  *
  34.  *  char *p,*charset,*string;
  35.  *
  36.  *  Skipto returns a pointer to the first character in string which
  37.  *  is in the string charset; it "skips until" a character in charset.
  38.  *  Skipover returns a pointer to the first character in string which
  39.  *  is not in the string charset; it "skips over" characters in charset.
  40.  ************************************************************************
  41.  * HISTORY
  42.  * $Log:    skipto.c,v $
  43.  * Revision 1.2  90/12/11  17:59:10  mja
  44.  *     Add copyright/disclaimer for distribution.
  45.  * 
  46.  * 26-Jun-81  David Smith (drs) at Carnegie-Mellon University
  47.  *    Skipover, skipto rewritten to avoid inner loop at expense of space.
  48.  *
  49.  * 20-Nov-79  Steven Shafer (sas) at Carnegie-Mellon University
  50.  *    Skipover, skipto adapted for VAX from skip() and skipx() on the PDP-11
  51.  *    (from Ken Greer).  The names are more mnemonic.
  52.  *
  53.  *    Sindex adapted for VAX from indexs() on the PDP-11 (thanx to Ralph
  54.  *    Guggenheim).  The name has changed to be more like the index()
  55.  *    and rindex() functions from Bell Labs; the return value (pointer
  56.  *    rather than integer) has changed partly for the same reason,
  57.  *    and partly due to popular usage of this function.
  58.  */
  59.  
  60. static unsigned char tab[256] = {
  61.     0};
  62.  
  63. char *skipto (string,charset)
  64. unsigned char *string, *charset;
  65. {
  66.     register unsigned char *setp,*strp;
  67.  
  68.     tab[0] = 1;        /* Stop on a null, too. */
  69.     for (setp=charset;  *setp;  setp++) tab[*setp]=1;
  70.     for (strp=string;  tab[*strp]==0;  strp++)  ;
  71.     for (setp=charset;  *setp;  setp++) tab[*setp]=0;
  72.     return ((char *)strp);
  73. }
  74.  
  75. char *skipover (string,charset)
  76. unsigned char *string, *charset;
  77. {
  78.     register unsigned char *setp,*strp;
  79.  
  80.     tab[0] = 0;        /* Do not skip over nulls. */
  81.     for (setp=charset;  *setp;  setp++) tab[*setp]=1;
  82.     for (strp=string;  tab[*strp];  strp++)  ;
  83.     for (setp=charset;  *setp;  setp++) tab[*setp]=0;
  84.     return ((char *)strp);
  85. }
  86.